<?php

namespace Usuarios\Model;

//use Zend\Db\TableGateway\TableGateway;

require_once('nusoap/nusoap.php');
use nusoap_client as SoapClient;

class UsuarioTable {

/*   protected $tableGateway;

   public function __construct(TableGateway $tableGateway) {
      $this->tableGateway = $tableGateway;
   }*/

   private $client;

   public function __construct() {
      $this->client = new SoapClient('http://zend.localhost/soap_asistencia_uca/usuarios_soap.php');
   }

/*   public function fetchAll() {
      $resultSet = $this->tableGateway->select();
      return $resultSet;
   }*/

   //SOAP Client Version
   public function fetchAll() {
      $result = $this->client->call('usuariotable_fetchAll',array());
      //var_dump($result);

      //convertimos la respuesta de array a objetos
      $rowset = json_decode(json_encode($result), FALSE);

      return $rowset;
   }

/*   public function getUsuario($id) {
      $id = (int) $id;
      $rowset = $this->tableGateway->select(array('id' => $id));
      $row = $rowset->current();
      if (!$row) {
         throw new \Exception("Could not find row $id");
      }
      return $row;
   }*/

   //SOAP Client Version
   public function getUsuario($id) {
      $id = (int) $id;

      $result = $this->client->call('getUsuario',array('id' => $id));

      if (empty($result)) {
         throw new \Exception("Could not find row $id");
      }

      $usuario = new Usuario();
      $rowset = json_decode(json_encode($result), FALSE);

      $data = array(
         'id' => $rowset[0]->id,
         'id_profesor' => $rowset[0]->id,
         'matricula' => $rowset[0]->matricula,
         'id_funcionario' => $rowset[0]->id_funcionario,
         'username' => $rowset[0]->username,
         'password' => $rowset[0]->password,
         'nombre' => $rowset[0]->nombre,
         'apellido' => $rowset[0]->apellido,
         'sexo' => $rowset[0]->sexo,
         'domicilio' => $rowset[0]->domicilio,
         'mail' => $rowset[0]->mail,
         'telefono' => $rowset[0]->telefono,
         'estado_civil' => $rowset[0]->estado_civil,
         'fecha_nacimiento' => $rowset[0]->fecha_nacimiento,
         'lugar_nacimiento' => $rowset[0]->lugar_nacimiento,
         'nacionalidad' => $rowset[0]->nacionalidad,
      );
      $usuario->exchangeArray($data);

      return $usuario;
   }

/*   public function getUsuarioByUserName($username) {
      $rowset = $this->tableGateway->select(array('username' => $username));
      $row = $rowset->current();
      if (!$row) {
         throw new \Exception("Could not find row $username");
      }
      return $row;
   }*/

   //SOAP Client Version
   public function getUsuarioByUserName($username) {

      $result = $this->client->call('getUsuarioByUserName',array('username' => $username));

      if (empty($result)) {
         throw new \Exception("Could not find the row $username");
      }
      $rowset = json_decode(json_encode($result), FALSE);
      return $rowset[0];
   }

/*   public function searchUsersByName($name, $lastname) {
      $select  = new \Zend\Db\Sql\Select;
//SELECT * FROM usuarios WHERE nombre ilike '%$name%' AND apellido ilike '%$lastname%';
      $select->from('usuarios');
      $select->where->literal('usuarios.nombre ilike ? AND usuarios.apellido ilike ?',
                                 array('%' . $name . '%','%' . $lastname . '%'));
      //echo $select->getSqlString();

      $rowset = $this->tableGateway->selectWith($select);
      return $rowset;
   }*/

   //SOAP Client Version
   public function searchUsersByName($name, $lastname) {

      $result = $this->client->call('searchUsersByName',array('name' => $name, 'lastname' => $lastname));
      //var_dump($result);

      //convertimos la respuesta de array a objetos
      $rowset = json_decode(json_encode($result), FALSE);

      return $rowset;
   }

/*   public function saveUsuario(Usuario $usuario) {
      $data = array(
         'id_profesor' => $usuario->id_profesor,
         'matricula' => $usuario->matricula,
         'id_funcionario' => $usuario->id_funcionario,
         'username' => $usuario->username,
         'password' => $usuario->password,
         'nombre' => $usuario->nombre,
         'apellido' => $usuario->apellido,
         'sexo' => $usuario->sexo,
         'domicilio' => $usuario->domicilio,
         'mail' => $usuario->mail,
         'telefono' => $usuario->telefono,
         'estado_civil' => $usuario->estado_civil,
         'fecha_nacimiento' => $usuario->fecha_nacimiento,
         'lugar_nacimiento' => $usuario->lugar_nacimiento,
         'nacionalidad' => $usuario->nacionalidad,
      );

      $id = (int)$usuario->id;
      if ($id == 0) {
         $this->tableGateway->insert($data);
      } else {
         if ($this->getUsuario($id)) {
            $this->tableGateway->update($data, array('id' => $id));
         } else {
            throw new \Exception('id does not exist');
         }
      }
   }*/

   //SOAP Client Version
   public function saveUsuario(Usuario $usuario) {
      $data = array(
         'id' => $usuario->id,
         'id_profesor' => $usuario->id_profesor,
         'matricula' => $usuario->matricula,
         'id_funcionario' => $usuario->id_funcionario,
         'username' => $usuario->username,
         'password' => $usuario->password,
         'nombre' => $usuario->nombre,
         'apellido' => $usuario->apellido,
         'sexo' => $usuario->sexo,
         'domicilio' => $usuario->domicilio,
         'mail' => $usuario->mail,
         'telefono' => $usuario->telefono,
         'estado_civil' => $usuario->estado_civil,
         'fecha_nacimiento' => $usuario->fecha_nacimiento,
         'lugar_nacimiento' => $usuario->lugar_nacimiento,
         'nacionalidad' => $usuario->nacionalidad,
      );

      $id = (int)$usuario->id;
      if ($id == 0) {
         $this->client->call('insertUsuario', $data);
      } else {
         if ($this->getUsuario($id)) {
            $this->client->call('updateUsuario', $data);
         } else {
            throw new \Exception('id does not exist');
         }
      }
   }

/*   public function deleteUsuario($id) {
      $this->tableGateway->delete(array('id' => $id));
   }*/

   //SOAP Client version
   public function deleteUsuario($id) {
      $this->client->call('deleteUsuario', array('id' => $id));
   }

}
